"""
@Author  : 康帅
@Time    : 2021/3/15 13:41
@Function: 单例模式实现一：重写__new__和__init__方法
"""


class Singleton:
    """ 单例实现方式一 """
    __instance = None
    __is_first_init = False

    def __new__(cls, name):
        """
        _new__负责对象的创建
        _new__是一个类方法
        __new__是通过类名进行实例化对象时自动调用的
        __new__方法创建一个实例之后返回这个实例的对象，并将其传递给__init__方法的self参数
        """

        if not cls.__instance:
            Singleton.__instance = super().__new__(cls)
        return cls.__instance

    def __init__(self, name):
        """
        __init__负责对象的初始化
        __init__是一个对象方法
        __init__是在每一次实例化对象之后调用的
        """

        if not self.__is_first_init:
            self.__name = name
            Singleton.__is_first_init = True

    def get_name(self):
        return self.__name


if __name__ == '__main__':
    tony = Singleton("Tony")
    jack = Singleton("Jack")
    print(tony.get_name(), jack.get_name())
    print("id(tony):", id(tony), "id(jack)", id(jack))
    print("tony == jack:", tony == jack)
